'''
    操作目的：升级原有的学生信息操作系统，将其与数据库进行链接
    操作步骤：
            1、导入模块,提示 pymysql
            2、建立学生类操作函数，依次实现查询、添加、删除以及断开连接
            3、调用已经建立的学生类操作函数实现数据的增删查
'''
#导入pymysql模块
import pymysql

class stuinfo:
    '''学生信息系统操作类'''
    def __init__(self):
        '''链接数据库'''
        self.db = pymysql.connect(
            host="localhost",           #mysql服务器地址
            port =3308,                 #mysql服务器端口
            user="root",                #用户名 
            password="",                #密码
            db="stu",                   #数据库名称
            charset="utf8")             #连接编码格式
        self.cursor = self.db.cursor()  #创建游标对象
    def findAll(self):
        '''学生信息查询'''
        sql = "select * from stu"
        try:                            #利用try...except将错误结果抛出
            self.cursor.execute(sql)    #执行sql操作
            while True:                 #解析结果
                data = self.cursor.fetchone()
                if data == None:        #判断
                    break;
                print(data)
        except Exception as err:
            print("SQL执行错误！！！原因是：",err)
    
    def insert(self,name,age,classid):
        '''学生信息添加'''
        self.name = name
        self.age = age
        self.classid = classid
        #定义sql语句
        sql = "insert into stu (name,age,classid) values('%s','%s','%s')"%(self.name,self.age,self.classid)
        try:                            #利用try...except将错误结果抛出
            self.cursor.execute(sql)    #执行sql操作
            self.db.commit()            #事务提交
        except Exception as err:
            self.db.rollback()          #事务回滚
            print("sql执行错误！原因是：",err)      
    def delete(self,id):
        '''学生信息删除'''
        self.id = id
        sql = "delete from stu where id=%s"%(self.id)
        try:   
            self.cursor.execute(sql)    #执行sql操作   
            self.db.commit()            #事务提交
        except Exception as err:
            self.db.rollback()          #事务回滚
            print("sql执行错误！原因是：",err)
    def __del__(self):
        '''断开数据库连接'''
        self.db.close()

'''学生信息系统类的实例化'''
stuinfo = stuinfo()


while True:
    '''学生信息系统展示'''
    print("="*12,"学生管理系统","="*14)
    print("{0:1} {1:13} {2:15}".format(" ","1.查看学生信息","2.添加学生信息"))
    print("{0:1} {1:13} {2:15}".format(" ","3.删除学生信息","4.退出系统"))
    print("="*40)
    key = input("请选择您要操作的序号：")
    if key == "1":
        print("="*12,"学生信息浏览","="*14)
        stuinfo.findAll()       #调用类以及相应函数
        input("按回车继续")
    elif key == "2":
        '''学生信息添加操作'''
        print("="*12,"学生信息添加","="*14)
        stu={}
        stu['name']=input("请输入学生姓名：")
        stu['age']=input("请输入学生年龄：")
        stu['classid']=input("请输入学生班级：")
        stuinfo.insert(stu['name'],stu['age'],stu['classid'])
        stuinfo.findAll()       #调用类以及相应函数
        input("按回车继续")
    elif key == "3":
        print("="*12,"学生信息删除","="*14)
        id=input("请输入要删除学生信息的id号：")
        stuinfo.delete(id)      #调用类以及相应函数
        stuinfo.findAll()       #调用类以及相应函数
        input("按回车继续")
    elif key == "4":
        print("="*12,"再见","="*14)
        break
    else:
        print("==========您的输入无效！===========")

